package com.yunzheng.controller;

import com.yunzheng.common.BaseResult;
import com.yunzheng.dto.FileChangeDTO;
import com.yunzheng.dto.FilePostDTO;
import com.yunzheng.service.ProjectFileService;
import com.yunzheng.util.TokenParser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

/**
 * @author Sun
 * @date 2020-07-26 23:15
 */
@Api(tags = "文档")
@Slf4j
@RestController
@RequestMapping("/file")
public class ProjectFileController {

    /**
     * 请求资源应该使用GET;
     * 添加资源应该使用POST;
     * 更新资源应该使用PUT;
     * 删除资源应该使用DELETE.
     */

    @Resource
    private ProjectFileService projectFileService;

    /**
     * 上传文档
     *
     * /post -- authc
     * @return 操作成功
     */
    @ApiOperation(value = "上传文档")
    @PostMapping("/post")
    public BaseResult filePost(HttpServletRequest request,@Valid @RequestBody FilePostDTO filePostDTO) {
        projectFileService.filePost(TokenParser.token2UserIdL(request).toString(), filePostDTO);
        return BaseResult.ok();
    }

    /**
     *展示文档列表
     *
     * /showList -- authc
     */
    @ApiOperation(value = "文档列表")
    @GetMapping("/showList")
    public BaseResult fileShowList(String projectId) {
        return BaseResult.ok(projectFileService.getFileListById(projectId));
    }

    /**
     * 展示文档详细内容
     * @param fileId 文件ID
     * @return 文档详细信息
     *
     * /show -- authc
     */
    @ApiOperation(value = "展示文档")
    @GetMapping("/show")
    public BaseResult fileShow(String fileId) {
        return BaseResult.ok(projectFileService.getFileById(fileId));
    }

    /**
     * 修改文档信息
     * @return 操作结果代码
     *
     * /change -- authc
     */
    @ApiOperation(value = "修改文档")
    @PutMapping("/change")
    public BaseResult fileChange(@Valid @RequestBody FileChangeDTO fileChangeDTO) {
        projectFileService.changeFile(fileChangeDTO);
        return BaseResult.ok();
    }

    /**
     * 删除文档
     * @return 操作结果代码
     *
     * /remove -- authc
     */
    @ApiOperation(value = "删除文档")
    @DeleteMapping("/remove")
    public BaseResult fileRemove(String fileId) {
        projectFileService.removeFile(fileId);
        return BaseResult.ok();
    }

}
